///////////////////////////////////////////////////////////////////////////////////////////////////
/// \file formic/all_data.h
///
/// \brief   header file for AllData class
///
///////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef FORMIC_ALL_DATA_HEADER
#define FORMIC_ALL_DATA_HEADER

#include <formic/input/base.h>
#include <formic/ham/ham.h>
#include <formic/wfn/wfn.h>

namespace formic {

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  /// \brief  A simple class used to hold the data on which the user's commands will act.
  ///
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  class AllData {

    public:

      /// \brief  constructor
      AllData(formic::InputBase & inp) : userinp(inp) {}

      /// \brief  The user input options.
      formic::InputBase & userinp;

      /// \brief  The real number Hamiltonian.
      formic::Hamiltonian<double> hd;

      /// \brief  The complex number Hamiltonian.
      formic::Hamiltonian<std::complex<double> > hc;

      /// \brief  a wavefunction using real numbers
      formic::Wavefunction<double> wd;

      /// \brief  a wavefunction using complex numbers
      formic::Wavefunction<std::complex<double> > wc;

  };

}

#endif
